from langchain_core.messages import HumanMessage
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, MessagesPlaceholder

from langchain.util import LLMFactory

# 字符串模板【纯字符串出来】
string_prompt = PromptTemplate.from_template("给我分析这只基金{name}")

formatted_prompt  = string_prompt.invoke({"name":"易方达"})

print(formatted_prompt )

# 聊天提示词模板，其实主要是使ai回答具有强关联性，避免幻觉的产生
chat_prompt = ChatPromptTemplate.from_messages(messages=[
        ("human", "借助你们的能力帮我分析这只基金{name}"),
        ("ai", "今天的走势xxx")
    ])
chat_prompt_result = chat_prompt.invoke({"name":"易方达"})
print(chat_prompt_result)


chat_prompt_v1 = ChatPromptTemplate.from_messages(
    [
        ("human", "对于这只基金{name}你们有什么研究"),  # 人类用户的输入
        ("system", "比较详细的研究成果"),  # 系统消息，提示AI生成详细研究成果
        ("ai", "比较详细的分析"),  # AI 的输出回复
        ("human", "基金管理人")  # 修改消息角色为 'human'，如果这条消息是由用户发出的
    ]
)

chat_prompt_result_v1 = chat_prompt_v1.invoke({"name":"易方达"})
print(chat_prompt_result_v1)


#消息占位符【对话形式】
# MessagesPlaceholder = 占位 + 历史消息存储
# 方便多轮对话场景，保持上下文连续
# 你可以随时更新、追加新的 HumanMessage 或 AIMessage
message_local_prompt = prompt_template = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant"),
    MessagesPlaceholder("msgs")
])

message_local_prompt_result = message_local_prompt.invoke({"msgs": [HumanMessage(content="hi!")]})
print(message_local_prompt_result)






